// Stack.js

// 定义一个栈类 Stack
class Stack {
  // 构造函数，初始化一个空的栈（数组形式）
  constructor() {
    this.items = []; // 用一个数组来存储栈中的元素
  }

  // 向栈中添加一个元素
  push(element) {
    this.items.push(element); // 使用数组的 push 方法将元素添加到栈顶
  }

  // 从栈中移除并返回栈顶元素
  pop() {
    // 如果栈为空，返回提示信息
    if (this.isEmpty()) {
      return ""; // 栈为空时，不能执行 pop 操作
    }
    // 否则，移除并返回栈顶元素
    return this.items.pop(); // 使用数组的 pop 方法移除栈顶元素
  }

  // 查看栈顶元素，但不移除它
  peek() {
    // 如果栈为空，返回提示信息
    if (this.isEmpty()) {
      return ""; // 栈为空时，无法查看栈顶元素
    }
    // 否则，返回栈顶的元素
    return this.items[this.items.length - 1]; // 数组最后一个元素即为栈顶元素
  }

  // 判断栈是否为空
  isEmpty() {
    // 如果栈中的元素个数为 0，说明栈为空
    return this.items.length === 0; // 使用数组的 length 属性检查栈的元素个数
  }

  // 返回栈中的元素个数
  size() {
    return this.items.length; // 数组的 length 属性返回栈中元素的数量
  }

  // 打印栈中的所有元素
  print() {
    console.log(this.items.toString()); // 使用 toString 方法将栈中的元素转化为字符串并打印
  }
  //清空栈
  clear() {
    this.items = [];
  }
}

// 使用 ES6 的 export 语法导出 Stack 类，使其可以在其他文件中导入
export default Stack;
